#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
make_gif.py

将指定目录下的图片合成为一个 GIF 动画。
"""

import os
import sys
import glob
import imageio

def make_gif(image_dir, output_path, pattern="*.png", fps=2):
    """
    Parameters
    ----------
    image_dir : str
        存放图片的目录。
    output_path : str
        生成的 GIF 文件路径，例如 "result/animation.gif"。
    pattern : str
        匹配图片的 glob 模式，默认 "*.png"。
    fps : float
        帧率 (frames per second)，即每秒切换多少张图。
    """
    # 按名称排序
    files = sorted(glob.glob(os.path.join(image_dir, pattern)))
    if not files:
        print(f"No images found in {image_dir} with pattern {pattern}")
        return

    # 读取所有图像
    imgs = []
    for fn in files:
        try:
            imgs.append(imageio.imread(fn))
        except Exception as e:
            print(f"Warning: failed to read {fn}: {e}", file=sys.stderr)

    # 保存 GIF
    duration = 1.0 / fps
    imageio.mimsave(output_path, imgs, duration=duration)
    print(f"GIF saved to {output_path}")

if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser(
        description="将目录下的图片合成为 GIF 动画"
    )
    parser.add_argument(
        "-i", "--input_dir", required=True,
        help="图像所在目录，例如 result/cutouts"
    )
    parser.add_argument(
        "-o", "--output", default="animation.gif",
        help="输出 GIF 文件名，默认 animation.gif"
    )
    parser.add_argument(
        "--pattern", default="*.png",
        help="匹配图像的 glob 模式，默认 *.png"
    )
    parser.add_argument(
        "--fps", type=float, default=2.0,
        help="帧率，默认 2 FPS"
    )
    args = parser.parse_args()

    # 确保安装 imageio：pip install imageio
    make_gif(args.input_dir, args.output, args.pattern, args.fps)
